<?php
namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use App\Http\Controllers\admin\GoodsController;

class CarouselController extends Controller
{
    /**
     *  网站的轮播图
     */

    // 轮播图插入页面
    public function getAdd()
    {
        return view('admin.carousel.add');
    }


    // 插入数据
    public function postInsert(Request $request)
    {
        // 自动验证表单
        $this -> validate($request,[
            'url' => 'required|url',
            'image' => 'required',
        ],
        [
            'url.required' => 'url地址不能为空',
            'url.url' => 'url格式不正确',
            'image.required' => '图片不能为空',
        ]);
        // 数据处理
        $arr = $request -> except('_token');

        if ($request->hasFile('image')) {
            // 获取图片后缀
            $suffix = $request -> file('image') -> getClientOriginalExtension();

            //设置图片名称 
            $name = date('YmdHis',time());

            // 判断图片后缀名
            $array = ['jpg','png','gif','jpeg'];
            if (in_array($suffix,$array)) {
                $arr['image'] = '/ad/image/'.$name.'.'.$suffix;
                $request -> file('image') -> move('./ad/image',$name.'.'.$suffix);
            }else{
               return back() -> with('error','文件格式不正确');
            }
        }

        // 查询共有几条数据
        $list = DB::table('carousel') -> count();
        if($list < 5){
            // 插入数据库
            $res = DB::table('carousel') -> insert($arr);  
        }else{
            return back() -> with('error','添加条数已打上限5条');
        }
        

        // 判断返回的影响行数 把操作的结果压入session
        if ($res > 0) {
            return redirect('/admin/carousel/index') -> with('success','添加成功');
        }else{
            return back() -> with('error','添加失败');
        }
    }

    // 轮播图显示列表
    public function getIndex(Request $request)
    {
        // 接受搜索的关键字
        $search = $request -> input('search','');

        // 接受每页显示的条数
        $count = $request -> input('count',10);        

        // 获取用户表(carousel)里面的数据信息
        $data = DB::table('carousel') -> where('url','like','%'.$search.'%')-> orderBy('id','asc') -> paginate($count);
        return view('admin.carousel.index',['data'=>$data,'request'=>$request -> all()]);
    }

    // 删除操作
    public function getDelete($id)
    {
        // 查询数据
        $arr = DB::table('carousel') -> where('id','=',$id) -> first();

        // 删除对应id的数据
        $res = DB::table('carousel') -> where('id','=',$id) -> delete();

        // 删除服务器中的对应id的图片
        $res1 = unlink('.'.$arr['image']);

         // 判断返回的影响行数 把操作的结果压入session
        if ($res > 0 && $res1) {
            return redirect('/admin/carousel/index') -> with('success','删除成功');
        }else{
            return back() -> with('error','删除失败');
        }
    }

    // 修改操作
    public function getEdit($id)
    {
        // 轮播图修改页面
        $data = DB::table('carousel') ->where('id',$id)-> first();

        return view('admin.carousel.edit',['data'=>$data]);
    }

    public function postUpdate(Request $request)
    {
        
        // 获取隐藏域传过来的id
        $id = $request -> only('id');

        // 提取参数
        $arr = $request -> except('_token','id');

         // 查询数据
        $data = DB::table('carousel') -> where('id','=',$id) -> first();

        // 判断图片是否修改
        if ($request -> hasFile('image')) {

            // 获取图片后缀
            $suffix = $request -> file('image') -> getClientOriginalExtension();

            //设置图片名称 
            $name = date('YmdHis',time());

            // 判断图片后缀名格式->拼接
            $array = ['jpg','png','gif','jpeg'];
            if (in_array($suffix,$array)) {
                $arr['image'] = '/ad/image/'.$name.'.'.$suffix;
                $request -> file('image') -> move('./ad/image',$name.'.'.$suffix);

                // 删除服务器中的对应id的图片
                unlink('.'.$data['image']);
            }else{
               return back() -> with('error','文件格式不正确');
            }
        }

        // 修改数据
        $res = DB::table('carousel') ->where('id',$id) -> update($arr);
        
        // 判断返回的影响行数 把操作的结果压入session
        if ($res > 0) {
            
            return redirect('/admin/carousel/index') -> with('success','修改成功');
        }else{
            return back() -> with('error','修改失败');
        }
      

    }
    /**
    *   广告位添加图片视图
    */
    public function getAdver(){
        // 查询广告位并显示
        $adverShow = DB::table('adver') -> get();
        return view('admin.carousel.adver',['adverShow' => $adverShow]);
    }
    /**
    *   广告位添加
    */
    public function postAddadver(Request $request){
        $this -> validate($request,[
                'name' => 'required',
                'url' => 'required',
                'pic' => 'required'
            ],[
                'name.required' => '广告位名未填写',
                'url.required' => '广告位连接未填写',
                'pic.required' => '广告位图片未上传'
            ]);
        // 图片上传准备
        if(!$request -> hasFile('pic')){
            return back() -> with('error','插入失败 请刷新后重试');
        }
        $dir = '/adminassets/adverphoto/'.time().'/';
        $picname = time().rand(100,999).'.'.$request -> file('pic') ->getClientOriginalExtension();
        $request -> file('pic') -> move('.'.$dir,$picname);
        // 数据准备
        $data['advername'] = $request -> input('name');
        $data['adverurl'] = $request -> input('url');
        $data['time'] = time();
        $data['adverphoto'] = $dir.$picname;
        // 数据库插入执行
        $res = DB::table('adver') -> insert($data);
        if($res){
            return redirect('/admin/carousel/adver') -> with('success','广告创建成功');
        } else{
            return redirect('/admin/carousel/adver') -> with('error','广告创建失败');
        }
    }

    /**
    *   广告位删除
    */
    public function getDeladver(Request $request){
        // 判断参数是否收到
        if(!$request -> has('id')){
            return 0;
        }
        // 文件删除
        $src = DB::table('adver')
            -> where('id',$request -> input('id'))
            -> first()['adverphoto'];

         if (file_exists('.'.$src)) {
           $res1 = unlink('.'.$src);
        }  
        // 删除空目录
        GoodsController::reDir('./adminassets/adverphoto');
        // 对数据库广告位进行删除
        $res = DB::table('adver')
            -> where('id',$request -> input('id'))
            -> delete();
        return $res;
    }

    /**
    *   广告位修改
    */
    public function getAedit($id)
    {
        // 轮播图修改页面
        $data = DB::table('adver') ->where('id',$id)-> first();

        return view('admin.carousel.aedit',['data'=>$data]);
    }

    public function postAupdate(Request $request)
    {
        
        // 获取隐藏域传过来的id
        $id = $request -> only('id');

        // 提取参数
        $arr = $request -> except('_token','id','pic');

        // 查询数据
        $data = DB::table('adver') -> where('id','=',$id) -> first();

        // 判断图片是否修改
        if ($request -> hasFile('pic')) {

            // 获取图片后缀
            $suffix = $request -> file('pic') -> getClientOriginalExtension();

            // 判断图片后缀名格式->拼接
            $array = ['jpg','png','gif','jpeg'];
            if (in_array($suffix,$array)) {
                $dir = '/adminassets/adverphoto/'.time().'/';
                $picname = time().rand(100,999).'.'.$request -> file('pic') ->getClientOriginalExtension();
                
                $request -> file('pic') -> move('.'.$dir,$picname);

                $arr['time'] = time();

                $arr['adverphoto'] = $dir.$picname;
                // 删除服务器中的对应id的图片
                unlink('.'.$data['adverphoto']);
                // 删除空目录
                GoodsController::reDir('./adminassets/adverphoto');
            }else{
               return back() -> with('error','文件格式不正确');
            }
        }
        
        // 修改数据
        $res = DB::table('adver') ->where('id',$id) -> update($arr);
        
        // 判断返回的影响行数 把操作的结果压入session
        if ($res > 0) {
            
            return redirect('/admin/carousel/adver') -> with('success','修改成功');
        }else{
            return back() -> with('error','修改失败');
        }
      

    }

}
